/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package rest;

import com.google.gson.Gson;
import entidade.Local;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import rest.pojo.LocalPOJO;
import rest.pojo.conversor.LocalConverter;
import rn.LocalRN;
import util.Mensagem;

//WebService
//Define o caminho para acessar esse recurso
@Path("/wslocal")
public class LocalResource implements InterfaceResource<Local> {

    Local local;
    LocalPOJO localPOJO;
    LocalRN rnLocal = LocalRN.getInstance();
    Mensagem mensagem=Mensagem.getInstance();
    Gson gson = new Gson();
    List<LocalPOJO> locaisPOJO = new ArrayList<>();

    @Override
    @Path("/salvar")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public String salvar(Local local) {
        try {

            rnLocal.salvar(local);
            System.out.println("msg "+Mensagem.getMensagemOperacao());
            mensagem.setMensagemDeEnvio(Mensagem.getMensagemOperacao());
            String json =gson.toJson(mensagem);
            
            System.out.println("json "+json);
            
            return gson.toJson(mensagem);
        } catch (Exception e) {

            return e.getMessage();
        }
    }

    @Override
    @Path("/excluir")
    @DELETE
    @Produces(MediaType.APPLICATION_JSON)
    public String excluir(@QueryParam("id") int id) {
        try {
            System.out.println("excluir " + id);
            local = new Local();
            local = rnLocal.obter(id);

            if (rnLocal.remover(local) == true) {
                return "Local Removido com Sucesso!";
            } else {
                return "Local Não  Removido";
            }
        } catch (Exception e) {
            return "Erro no Servidor: " + e.getMessage();
        }
    }

    @Override
    @Path("/local")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String obter(@QueryParam("id") int id) {
        try {
            local = new Local();
            local = rnLocal.obter(id);
            localPOJO = LocalConverter.toLocalPOJO(local);
            if (localPOJO != null) {
                String json = gson.toJson(localPOJO);
                return json;
            } else {
                System.out.println("Não encontrado");
               
                
                return "Local Não Encontrado";
            }
        } catch (Exception e) {
           
            return e.getMessage();
        }
    }

    @Override
    @Path("/locais")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String obterTodos() {
        try {
            locaisPOJO = LocalConverter.toLocaisPOJO(rnLocal.obterTodos());
            System.out.println("obter");
            String jsonArray = gson.toJson(locaisPOJO);
            System.out.println("locais: " + jsonArray);
            return jsonArray;
        } catch (Exception e) {
            
            return e.getMessage();
        }

    }

////Define qual método http vai acessar esse método java
//    @GET
////Já retorna no formato GSON
//    @Path("/buscarLocalGSON")
////Retorno do tipo de dados
//    @Produces(MediaType.APPLICATION_JSON)
//    public String obter() {
//        Local local= new Local();
//        LocalRN rn = new LocalRN();
//        List<Local> locais = new ArrayList<Local>();
//        locais=rn.obterTodos();
//        Gson g= new Gson();
//        String json= g.toJson(locais);
//        System.out.println(json);
//        return json;
//    }
//    @POST
//    @Path("/inserirListaLocal")
//    @Produces("application/json")
//    @Consumes("application/json")
//    public void salvar(List<Local> locais){
//        for (Local local : locais) {
//            LocalRN rn= new LocalRN();
//            System.out.println("Local "+local.getNome());
//            rn.salvar(local);
//        }
//    }
}
